1. Field of the Invention
This invention relates to multiprocessors and particularly to systems and methods for coordinating or synchronizing parallel execution of separate program threads.
2. Description of Related Art
Multiprocessors are known to include multiple processors that cooperate to accomplish a task. A relatively simple multiprocessor system includes a co-processor (such as a 80386 processor) and a floating point processor (such as a 80387 math co-processor). In such systems, when the processor encounters an instruction which requires a floating point operation, the processor activates the co-processor which executes the instruction. Math co-processors such as the 80387 are limited to executing a single instruction when directed and are idle between floating point instructions. The increase in processing power provided by such co-processors is correspondingly limited.
Another multiprocessor architecture contains two or more identical processors which execute separate but coordinated program threads. Keeping program threads coordinated or synchronized, for example, to pass results between program threads can be difficult because the time required to complete a section of a program thread varies. For example, cache hits and misses and instruction dependencies can delay execution pipelines and change the number of cycles required to complete instructions. Accordingly, instruction sequences in different program threads often get out of synchronization with each other.
To maintain proper synchronization, hardware connected between the processors can delay or idle processors as required to synchronize one program thread with another. In some systems having multiple identical processors, each program thread is responsible for delaying itself or other program threads. Such systems often have complex synchronization hardware and required complicated software to maintain synchronization and coordination of program threads. The complex synchronization hardware increases chip size in an integrated system, and the complicated synchronization makes software longer and more difficult to develop.
Multiprocessor systems are sought which provide the high processing power, the flexibility of multiple separate program threads, and a simple method for synchronizing or coordinating the program threads.